#ifndef AVALON_REVERSEENCODER_HPP
#define AVALON_REVERSEENCODER_HPP
#include "Avalon/Codecs/Encoder.hpp"
#include "Avalon/CodecsTests/CodecsTests.hpp"

namespace Avalon {
namespace Codecs {
namespace Tests {

  /*! \class ReverseEncoder
   *  \brief Reverses a data source.
   */
  class ReverseEncoder : public Encoder {
    public:

      //! Constructs a ReverseEncoder.
      ReverseEncoder();

      virtual ~ReverseEncoder();

      virtual bool IsEncodeInPlaceSupported();

      virtual void Encode(const void* source, int sourceSize,
        void* destination, int destinationSize, int* encodedSize = NULL);

      virtual void Encode(const void* source, int sourceSize,
        IO::Buffer* destination, int* encodedSize = NULL);

      using Encoder::Encode;

      using Encoder::EncodeInPlace;
  };
}
}
}

#endif // AVALON_REVERSEENCODER_HPP
